package design_pattern.observer.demo01;

import java.util.ArrayList;
import java.util.List;

/**
 * @version 1.0.0
 * Created by cyd on 2022-06-15 17:18:37
 * @ClassName : design_pattern.observer.demo01.Subject
 * @Description : 抽象主题，通知者
 */
public abstract class Subject {

    /**
     * 虽然通知者持有很多观察者的引用，但其实它并不关注谁在监听自己；
     */
    private final List<Observer> observers = new ArrayList<>();

    /**
     * 增加观察者
     */
    public void attach(Observer observer) {
        observers.add(observer);
    }

    /**
     * 移除观察者
     */
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    /**
     * 通知观察者
     */
    public void notifyObserver() {
        observers.forEach(Observer::update);
    }

}
